﻿using Levfier.Proccessors;
using Levfier.Proccessors.Measuring;
using System;
using System.Windows.Media;

namespace Levfier.GUI.EditorControls.Measuring
{
    /// <summary>
    /// SpectrumAnalyzerControl.xaml の相互作用ロジック
    /// </summary>
    [Serializable]
    public partial class SpectrumAnalyzerControl : ProccessorControl
    {
        /// <summary>
        /// コントロールの名前
        /// </summary>
        public static readonly string ControlName = "Spectrum Analyzer";

        /// <summary>
        /// プロパティ画面
        /// ２回以上作った場合、アナライズが複数開けるようになるため
        /// 変数に可能し、一回のみ生成する。
        /// </summary>
        private SpectrumAnalyzerView view;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public SpectrumAnalyzerControl()
        {
            InitializeComponent();
            this.proccessor = new SpectrumAnalyzer();
        }

        /// <summary>
        /// 削除時動作
        /// </summary>
        /// <returns></returns>
        public override System.Collections.Generic.IEnumerable<System.Windows.UIElement> Delete()
        {
            this.view.Delete();
            return base.Delete();
        }

        /// <summary>
        /// 選択された時の動作
        /// 末端の子クラスで実装すること
        /// </summary>
        /// <param name="sender">イベント発生源</param>
        public override void Select(object sender)
        {
            this.border.BorderBrush = this.selectedBrush;
        }

        /// <summary>
        /// 選択解除された時の動作
        /// 末端の子クラスで実装すること
        /// </summary>
        /// <param name="sender">イベント発生源</param>
        public override void Unselect(object sender)
        {
            this.border.BorderBrush = Brushes.Transparent;
        }

        /// <summary>
        /// プロパティ画面を生成する
        /// </summary>
        /// <returns>プロパティ画面（縦）のコントロール</returns>
        public override System.Windows.Controls.UserControl GetPropertyEditorView()
        {
            IProccessable proccessor = this.GetProccessor();
            if (null != proccessor && 0 != proccessor.GetParameters().Count)
            {
                if (null != this.view)
                {
                    return this.view;
                }
                else
                {
                    this.view = new SpectrumAnalyzerView(proccessor as SpectrumAnalyzer, proccessor.GetParameters());
                    return this.view;
                }
            }
            return null;  
        }
    }
}
